<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />

  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>Lorax &mdash; Lorax 36.3 documentation</title>
      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
  
        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
        <script src="_static/jquery.js"></script>
        <script src="_static/underscore.js"></script>
        <script src="_static/doctools.js"></script>
    <script src="_static/js/theme.js"></script>
    <link rel="index" title="Index" href="genindex.html" />
    <link rel="search" title="Search" href="search.html" />
    <link rel="next" title="livemedia-creator" href="livemedia-creator.html" />
    <link rel="prev" title="Introduction to Lorax" href="intro.html" /> 
</head>

<body class="wy-body-for-nav"> 
  <div class="wy-grid-for-nav">
    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
      <div class="wy-side-scroll">
        <div class="wy-side-nav-search" >
            <a href="index.html" class="icon icon-home"> Lorax
          </a>
              <div class="version">
                36.3
              </div>
<div role="search">
  <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
    <input type="text" name="q" placeholder="Search docs" />
    <input type="hidden" name="check_keywords" value="yes" />
    <input type="hidden" name="area" value="default" />
  </form>
</div>
        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
              <ul class="current">
<li class="toctree-l1"><a class="reference internal" href="intro.html">Introduction to Lorax</a></li>
<li class="toctree-l1"><a class="reference internal" href="intro.html#before-lorax">Before Lorax</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">Lorax</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#lorax-cmdline-arguments">lorax cmdline arguments</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#Positional Arguments">Positional Arguments</a></li>
<li class="toctree-l3"><a class="reference internal" href="#options">options</a></li>
<li class="toctree-l3"><a class="reference internal" href="#required arguments">required arguments</a></li>
<li class="toctree-l3"><a class="reference internal" href="#Named Arguments">Named Arguments</a></li>
<li class="toctree-l3"><a class="reference internal" href="#dracut arguments: (default: )">dracut arguments: (default: )</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#quickstart">Quickstart</a></li>
<li class="toctree-l2"><a class="reference internal" href="#branding">Branding</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#variants">Variants</a></li>
<li class="toctree-l3"><a class="reference internal" href="#custom-branding">Custom Branding</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#running-inside-of-mock">Running inside of mock</a></li>
<li class="toctree-l2"><a class="reference internal" href="#how-it-works">How it works</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#runtime-install-tmpl">runtime-install.tmpl</a></li>
<li class="toctree-l3"><a class="reference internal" href="#runtime-postinstall-tmpl">runtime-postinstall.tmpl</a></li>
<li class="toctree-l3"><a class="reference internal" href="#runtime-cleanup-tmpl">runtime-cleanup.tmpl</a></li>
<li class="toctree-l3"><a class="reference internal" href="#the-squashfs-filesystem">The squashfs filesystem</a></li>
<li class="toctree-l3"><a class="reference internal" href="#iso-creation">iso creation</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#custom-templates">Custom Templates</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="livemedia-creator.html">livemedia-creator</a></li>
<li class="toctree-l1"><a class="reference internal" href="mkksiso.html">mkksiso</a></li>
<li class="toctree-l1"><a class="reference internal" href="product-images.html">Product and Updates Images</a></li>
<li class="toctree-l1"><a class="reference internal" href="modules.html">src</a></li>
</ul>

        </div>
      </div>
    </nav>

    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
          <a href="index.html">Lorax</a>
      </nav>

      <div class="wy-nav-content">
        <div class="rst-content">
          <div role="navigation" aria-label="Page navigation">
  <ul class="wy-breadcrumbs">
      <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
      <li>Lorax</li>
      <li class="wy-breadcrumbs-aside">
            <a href="_sources/lorax.rst.txt" rel="nofollow"> View page source</a>
      </li>
  </ul>
  <hr/>
</div>
          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
           <div itemprop="articleBody">
             
  <section id="lorax">
<h1>Lorax<a class="headerlink" href="#lorax" title="Permalink to this headline">¶</a></h1>
<dl class="field-list simple">
<dt class="field-odd">Authors</dt>
<dd class="field-odd"><p>Brian C. Lane &lt;<a class="reference external" href="mailto:bcl&#37;&#52;&#48;redhat&#46;com">bcl<span>&#64;</span>redhat<span>&#46;</span>com</a>&gt;</p>
</dd>
</dl>
<p>&quot;I am the Lorax.  I speak for the trees [and images].&quot;</p>
<p>The <a class="reference external" href="https://github.com/rhinstaller/lorax">lorax</a> tool is used to create the
<a class="reference external" href="https://github.com/rhinstaller/anaconda">Anaconda</a> installer boot.iso as
well as the basic release tree, and .treeinfo metadata file. Its dependencies
are fairly light-weight because it needs to be able to run in a mock chroot
environment. It is best to run lorax from the same release as is being targeted
because the templates may have release specific logic in them. eg. Use the
rawhide version to build the boot.iso for rawhide, along with the rawhide
repositories.</p>
<section id="lorax-cmdline-arguments">
<h2>lorax cmdline arguments<a class="headerlink" href="#lorax-cmdline-arguments" title="Permalink to this headline">¶</a></h2>
<p><p>Create the Anaconda boot.iso</p>
</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">usage</span><span class="p">:</span> <span class="n">lorax</span> <span class="p">[</span><span class="o">-</span><span class="n">h</span><span class="p">]</span> <span class="o">-</span><span class="n">p</span> <span class="n">PRODUCT</span> <span class="o">-</span><span class="n">v</span> <span class="n">VERSION</span> <span class="o">-</span><span class="n">r</span> <span class="n">RELEASE</span> <span class="p">[</span><span class="o">-</span><span class="n">s</span> <span class="n">REPOSITORY</span><span class="p">]</span> <span class="p">[</span><span class="o">--</span><span class="n">repo</span> <span class="n">REPOSITORY</span><span class="p">]</span> <span class="p">[</span><span class="o">-</span><span class="n">m</span> <span class="n">REPOSITORY</span><span class="p">]</span>
             <span class="p">[</span><span class="o">-</span><span class="n">t</span> <span class="n">VARIANT</span><span class="p">]</span> <span class="p">[</span><span class="o">-</span><span class="n">b</span> <span class="n">URL</span><span class="p">]</span> <span class="p">[</span><span class="o">--</span><span class="n">isfinal</span><span class="p">]</span> <span class="p">[</span><span class="o">-</span><span class="n">c</span> <span class="n">CONFIGFILE</span><span class="p">]</span> <span class="p">[</span><span class="o">--</span><span class="n">proxy</span> <span class="n">HOST</span><span class="p">]</span> <span class="p">[</span><span class="o">-</span><span class="n">i</span> <span class="n">PACKAGE</span><span class="p">]</span> <span class="p">[</span><span class="o">-</span><span class="n">e</span> <span class="n">PACKAGE</span><span class="p">]</span>
             <span class="p">[</span><span class="o">--</span><span class="n">buildarch</span> <span class="n">ARCH</span><span class="p">]</span> <span class="p">[</span><span class="o">--</span><span class="n">volid</span> <span class="n">VOLID</span><span class="p">]</span> <span class="p">[</span><span class="o">--</span><span class="n">macboot</span><span class="p">]</span> <span class="p">[</span><span class="o">--</span><span class="n">nomacboot</span><span class="p">]</span> <span class="p">[</span><span class="o">--</span><span class="n">noupgrade</span><span class="p">]</span>
             <span class="p">[</span><span class="o">--</span><span class="n">logfile</span> <span class="n">LOGFILE</span><span class="p">]</span> <span class="p">[</span><span class="o">--</span><span class="n">tmp</span> <span class="n">TMP</span><span class="p">]</span> <span class="p">[</span><span class="o">--</span><span class="n">cachedir</span> <span class="n">CACHEDIR</span><span class="p">]</span> <span class="p">[</span><span class="o">--</span><span class="n">workdir</span> <span class="n">WORKDIR</span><span class="p">]</span> <span class="p">[</span><span class="o">--</span><span class="n">force</span><span class="p">]</span>
             <span class="p">[</span><span class="o">--</span><span class="n">add</span><span class="o">-</span><span class="n">template</span> <span class="n">ADD_TEMPLATES</span><span class="p">]</span> <span class="p">[</span><span class="o">--</span><span class="n">add</span><span class="o">-</span><span class="n">template</span><span class="o">-</span><span class="n">var</span> <span class="n">ADD_TEMPLATE_VARS</span><span class="p">]</span>
             <span class="p">[</span><span class="o">--</span><span class="n">add</span><span class="o">-</span><span class="n">arch</span><span class="o">-</span><span class="n">template</span> <span class="n">ADD_ARCH_TEMPLATES</span><span class="p">]</span> <span class="p">[</span><span class="o">--</span><span class="n">add</span><span class="o">-</span><span class="n">arch</span><span class="o">-</span><span class="n">template</span><span class="o">-</span><span class="n">var</span> <span class="n">ADD_ARCH_TEMPLATE_VARS</span><span class="p">]</span>
             <span class="p">[</span><span class="o">--</span><span class="n">noverify</span><span class="p">]</span> <span class="p">[</span><span class="o">--</span><span class="n">sharedir</span> <span class="n">SHAREDIR</span><span class="p">]</span> <span class="p">[</span><span class="o">--</span><span class="n">enablerepo</span> <span class="p">[</span><span class="n">repo</span><span class="p">]]</span> <span class="p">[</span><span class="o">--</span><span class="n">disablerepo</span> <span class="p">[</span><span class="n">repo</span><span class="p">]]</span>
             <span class="p">[</span><span class="o">--</span><span class="n">rootfs</span><span class="o">-</span><span class="n">size</span> <span class="n">ROOTFS_SIZE</span><span class="p">]</span> <span class="p">[</span><span class="o">--</span><span class="n">noverifyssl</span><span class="p">]</span> <span class="p">[</span><span class="o">--</span><span class="n">dnfplugin</span> <span class="n">DNFPLUGINS</span><span class="p">]</span> <span class="p">[</span><span class="o">--</span><span class="n">squashfs</span><span class="o">-</span><span class="n">only</span><span class="p">]</span>
             <span class="p">[</span><span class="o">--</span><span class="n">skip</span><span class="o">-</span><span class="n">branding</span><span class="p">]</span> <span class="p">[</span><span class="o">--</span><span class="n">dracut</span><span class="o">-</span><span class="n">conf</span> <span class="n">DRACUT_CONF</span><span class="p">]</span> <span class="p">[</span><span class="o">--</span><span class="n">dracut</span><span class="o">-</span><span class="n">arg</span> <span class="n">DRACUT_ARGS</span><span class="p">]</span> <span class="p">[</span><span class="o">-</span><span class="n">V</span><span class="p">]</span>
             <span class="n">OUTPUTDIR</span>
</pre></div>
</div>
<section id="Positional Arguments">
<h3>Positional Arguments<a class="headerlink" href="#Positional Arguments" title="Permalink to this headline">¶</a></h3>
<dl class="option-list">
<dt><kbd>OUTPUTDIR</kbd></dt>
<dd><p>Output directory</p>
</dd>
</dl>
</section>
<section id="options">
<h3>options<a class="headerlink" href="#options" title="Permalink to this headline">¶</a></h3>
<dl class="option-list">
<dt><kbd>-V</kbd></dt>
<dd><p>show program's version number and exit</p>
</dd>
</dl>
</section>
<section id="required arguments">
<h3>required arguments<a class="headerlink" href="#required arguments" title="Permalink to this headline">¶</a></h3>
<dl class="option-list">
<dt><kbd>-p, --product</kbd></dt>
<dd><p>product name</p>
</dd>
<dt><kbd>-v, --version</kbd></dt>
<dd><p>version identifier</p>
</dd>
<dt><kbd>-r, --release</kbd></dt>
<dd><p>release information</p>
</dd>
<dt><kbd>-s, --source</kbd></dt>
<dd><p>source repository (may be listed multiple times)</p>
<p>Default: []</p>
</dd>
<dt><kbd>--repo</kbd></dt>
<dd><p>source dnf repository file</p>
<p>Default: []</p>
</dd>
</dl>
</section>
<section id="Named Arguments">
<h3>Named Arguments<a class="headerlink" href="#Named Arguments" title="Permalink to this headline">¶</a></h3>
<dl class="option-list">
<dt><kbd>-m, --mirrorlist</kbd></dt>
<dd><p>mirrorlist repository (may be listed multiple times)</p>
<p>Default: []</p>
</dd>
<dt><kbd>-t, --variant</kbd></dt>
<dd><p>variant name</p>
<p>Default: &quot;&quot;</p>
</dd>
<dt><kbd>-b, --bugurl</kbd></dt>
<dd><p>bug reporting URL for the product</p>
<p>Default: &quot;your distribution provided bug reporting tool&quot;</p>
</dd>
<dt><kbd>--isfinal</kbd></dt>
<dd><p>Default: False</p>
</dd>
<dt><kbd>-c, --config</kbd></dt>
<dd><p>config file</p>
<p>Default: &quot;/etc/lorax/lorax.conf&quot;</p>
</dd>
<dt><kbd>--proxy</kbd></dt>
<dd><p>repo proxy url:port</p>
</dd>
<dt><kbd>-i, --installpkgs</kbd></dt>
<dd><p>package glob to install before runtime-install.tmpl runs. (may be listed multiple times)</p>
<p>Default: []</p>
</dd>
<dt><kbd>-e, --excludepkgs</kbd></dt>
<dd><p>package glob to remove before runtime-install.tmpl runs. (may be listed multiple times)</p>
<p>Default: []</p>
</dd>
<dt><kbd>--buildarch</kbd></dt>
<dd><p>build architecture</p>
</dd>
<dt><kbd>--volid</kbd></dt>
<dd><p>volume id</p>
</dd>
<dt><kbd>--macboot</kbd></dt>
<dd><p>Make the iso bootable on UEFI based Mac systems</p>
<p>Default: True</p>
</dd>
<dt><kbd>--nomacboot</kbd></dt>
<dd><p>Do not create a Mac bootable iso</p>
<p>Default: False</p>
</dd>
<dt><kbd>--noupgrade</kbd></dt>
<dd><p>Default: True</p>
</dd>
<dt><kbd>--logfile</kbd></dt>
<dd><p>Path to logfile</p>
<p>Default: ./lorax.log</p>
</dd>
<dt><kbd>--tmp</kbd></dt>
<dd><p>Top level temporary directory</p>
<p>Default: &quot;/var/tmp/lorax&quot;</p>
</dd>
<dt><kbd>--cachedir</kbd></dt>
<dd><p>DNF cache directory. Default is a temporary dir.</p>
</dd>
<dt><kbd>--workdir</kbd></dt>
<dd><p>Work directory, overrides --tmp. Default is a temporary dir under /var/tmp/lorax</p>
</dd>
<dt><kbd>--force</kbd></dt>
<dd><p>Run even when the destination directory exists</p>
<p>Default: False</p>
</dd>
<dt><kbd>--add-template</kbd></dt>
<dd><p>Additional template for runtime image</p>
<p>Default: []</p>
</dd>
<dt><kbd>--add-template-var</kbd></dt>
<dd><p>Set variable for runtime image template</p>
<p>Default: []</p>
</dd>
<dt><kbd>--add-arch-template</kbd></dt>
<dd><p>Additional template for architecture-specific image</p>
<p>Default: []</p>
</dd>
<dt><kbd>--add-arch-template-var</kbd></dt>
<dd><p>Set variable for architecture-specific image</p>
<p>Default: []</p>
</dd>
<dt><kbd>--noverify</kbd></dt>
<dd><p>Do not verify the install root</p>
<p>Default: True</p>
</dd>
<dt><kbd>--sharedir</kbd></dt>
<dd><p>Directory containing all the templates. Overrides config file sharedir</p>
</dd>
<dt><kbd>--enablerepo</kbd></dt>
<dd><p>Names of repos to enable</p>
<p>Default: []</p>
</dd>
<dt><kbd>--disablerepo</kbd></dt>
<dd><p>Names of repos to disable</p>
<p>Default: []</p>
</dd>
<dt><kbd>--rootfs-size</kbd></dt>
<dd><p>Size of root filesystem in GiB. Defaults to 2.</p>
<p>Default: 2</p>
</dd>
<dt><kbd>--noverifyssl</kbd></dt>
<dd><p>Do not verify SSL certificates</p>
<p>Default: False</p>
</dd>
<dt><kbd>--dnfplugin</kbd></dt>
<dd><p>Enable a DNF plugin by name/glob, or * to enable all of them.</p>
<p>Default: []</p>
</dd>
<dt><kbd>--squashfs-only</kbd></dt>
<dd><p>Use a plain squashfs filesystem for the runtime.</p>
<p>Default: False</p>
</dd>
<dt><kbd>--skip-branding</kbd></dt>
<dd><p>Disable automatic branding package selection. Use --installpkgs to add custom branding.</p>
<p>Default: False</p>
</dd>
</dl>
</section>
<section id="dracut arguments: (default: )">
<h3>dracut arguments: (default: )<a class="headerlink" href="#dracut arguments: (default: )" title="Permalink to this headline">¶</a></h3>
<dl class="option-list">
<dt><kbd>--dracut-conf</kbd></dt>
<dd><p>Path to a dracut.conf file to use instead of the default arguments. See the dracut.conf(5) manpage.</p>
</dd>
<dt><kbd>--dracut-arg</kbd></dt>
<dd><p>Argument to pass to dracut when rebuilding the initramfs. Pass this once for each argument. NOTE: this overrides the defaults.</p>
</dd>
</dl>
</section>
</section>
<section id="quickstart">
<h2>Quickstart<a class="headerlink" href="#quickstart" title="Permalink to this headline">¶</a></h2>
<p>Run this as root to create a boot.iso in <code class="docutils literal notranslate"><span class="pre">./results/</span></code>:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">dnf</span> <span class="n">install</span> <span class="n">lorax</span>
<span class="n">setenforce</span> <span class="mi">0</span>
<span class="n">lorax</span> <span class="o">-</span><span class="n">p</span> <span class="n">Fedora</span> <span class="o">-</span><span class="n">v</span> <span class="mi">23</span> <span class="o">-</span><span class="n">r</span> <span class="mi">23</span> \
<span class="o">-</span><span class="n">s</span> <span class="n">http</span><span class="p">:</span><span class="o">//</span><span class="n">dl</span><span class="o">.</span><span class="n">fedoraproject</span><span class="o">.</span><span class="n">org</span><span class="o">/</span><span class="n">pub</span><span class="o">/</span><span class="n">fedora</span><span class="o">/</span><span class="n">linux</span><span class="o">/</span><span class="n">releases</span><span class="o">/</span><span class="mi">23</span><span class="o">/</span><span class="n">Everything</span><span class="o">/</span><span class="n">x86_64</span><span class="o">/</span><span class="n">os</span><span class="o">/</span> \
<span class="o">-</span><span class="n">s</span> <span class="n">http</span><span class="p">:</span><span class="o">//</span><span class="n">dl</span><span class="o">.</span><span class="n">fedoraproject</span><span class="o">.</span><span class="n">org</span><span class="o">/</span><span class="n">pub</span><span class="o">/</span><span class="n">fedora</span><span class="o">/</span><span class="n">linux</span><span class="o">/</span><span class="n">updates</span><span class="o">/</span><span class="mi">23</span><span class="o">/</span><span class="n">x86_64</span><span class="o">/</span> \
<span class="o">./</span><span class="n">results</span><span class="o">/</span>
<span class="n">setenforce</span> <span class="mi">1</span>
</pre></div>
</div>
<p>You can add your own repos with <code class="docutils literal notranslate"><span class="pre">-s</span></code> and packages with higher NVRs will
override the ones in the distribution repositories.</p>
<p>Under <code class="docutils literal notranslate"><span class="pre">./results/</span></code> will be the release tree files: .discinfo, .treeinfo, everything that
goes onto the boot.iso, the pxeboot directory, and the boot.iso under <code class="docutils literal notranslate"><span class="pre">./results/images/</span></code>.</p>
</section>
<section id="branding">
<h2>Branding<a class="headerlink" href="#branding" title="Permalink to this headline">¶</a></h2>
<p>By default lorax will search for the first package that provides <code class="docutils literal notranslate"><span class="pre">system-release</span></code>
that doesn't start with <code class="docutils literal notranslate"><span class="pre">generic-</span></code> and will install it. It then selects a
corresponding logo package by using the first part of the system-release package and
appending <code class="docutils literal notranslate"><span class="pre">-logos</span></code> to it. eg. fedora-release and fedora-logos.</p>
<section id="variants">
<h3>Variants<a class="headerlink" href="#variants" title="Permalink to this headline">¶</a></h3>
<p>If a <code class="docutils literal notranslate"><span class="pre">variant</span></code> is passed to lorax it will select a <code class="docutils literal notranslate"><span class="pre">system-release</span></code> package that
ends with the variant name. eg. Passing <code class="docutils literal notranslate"><span class="pre">--variant</span> <span class="pre">workstation</span></code> will select the
<code class="docutils literal notranslate"><span class="pre">fedora-release-workstation</span></code> package if it exists. It will select a logo package
the same way it does for non-variants. eg. <code class="docutils literal notranslate"><span class="pre">fedora-logos</span></code>.</p>
<p>If there is no package ending with the variant name it will fall back to using the
first non-generic package providing <code class="docutils literal notranslate"><span class="pre">system-release</span></code>.</p>
</section>
<section id="custom-branding">
<h3>Custom Branding<a class="headerlink" href="#custom-branding" title="Permalink to this headline">¶</a></h3>
<p>If <code class="docutils literal notranslate"><span class="pre">--skip-branding</span></code> is passed to lorax it will skip selecting the
<code class="docutils literal notranslate"><span class="pre">system-release</span></code>, and logos packages and leave it up to the user to pass any
branding related packages to lorax using <code class="docutils literal notranslate"><span class="pre">--installpkgs</span></code>. When using
<code class="docutils literal notranslate"><span class="pre">skip-branding</span></code> you must make sure that you provide all of the expected files,
otherwise Anaconda may not work as expected. See the contents of <code class="docutils literal notranslate"><span class="pre">fedora-release</span></code>
and <code class="docutils literal notranslate"><span class="pre">fedora-logos</span></code> for examples of what to include.</p>
<p>Note that this does not prevent something else in the dependency tree from
causing these packages to be included. Using <code class="docutils literal notranslate"><span class="pre">--excludepkgs</span></code> may help if they
are unexpectedly included.</p>
</section>
</section>
<section id="running-inside-of-mock">
<h2>Running inside of mock<a class="headerlink" href="#running-inside-of-mock" title="Permalink to this headline">¶</a></h2>
<p>As of mock version 2.0 you no longer need to pass <code class="docutils literal notranslate"><span class="pre">--old-chroot</span></code>. You will,
however, need to pass <code class="docutils literal notranslate"><span class="pre">--enable-network</span></code> so that the mock container can download
packages.</p>
<p>Older versions of mock, between 1.3.4 and 2.0, will need to pass <code class="docutils literal notranslate"><span class="pre">--old-chroot</span></code>
to mock. These versions of mock default to using systemd-nspawn which cannot
create the needed loop device nodes. Passing <code class="docutils literal notranslate"><span class="pre">--old-chroot</span></code> will use the old
system where <code class="docutils literal notranslate"><span class="pre">/dev/loop*</span></code> is setup for you.</p>
</section>
<section id="how-it-works">
<h2>How it works<a class="headerlink" href="#how-it-works" title="Permalink to this headline">¶</a></h2>
<p>Lorax uses <a class="reference external" href="https://github.com/rpm-software-management/dnf">dnf</a> to install
packages into a temporary directory, sets up configuration files, it then
removes unneeded files to save space, and creates a squashfs filesystem of the
files.  The iso is then built using a generic initramfs and the kernel from the
selected repositories.</p>
<p>To drive these processes Lorax uses a custom template system, based on <a class="reference external" href="http://www.makotemplates.org/">Mako
templates</a> with the addition of custom
commands (documented in <a class="reference internal" href="pylorax.html#pylorax.ltmpl.LoraxTemplateRunner" title="pylorax.ltmpl.LoraxTemplateRunner"><code class="xref py py-class docutils literal notranslate"><span class="pre">pylorax.ltmpl.LoraxTemplateRunner</span></code></a>). Mako
supports <code class="docutils literal notranslate"><span class="pre">%if/%endif</span></code> blocks as well as free-form python code inside <code class="docutils literal notranslate"><span class="pre">&lt;%</span>
<span class="pre">%&gt;</span></code> tags and variable substitution with <code class="docutils literal notranslate"><span class="pre">${}</span></code>. The default templates are
shipped with lorax in <code class="docutils literal notranslate"><span class="pre">/usr/share/lorax/templates.d/99-generic/</span></code> and use the
<code class="docutils literal notranslate"><span class="pre">.tmpl</span></code> extension.</p>
<section id="runtime-install-tmpl">
<h3>runtime-install.tmpl<a class="headerlink" href="#runtime-install-tmpl" title="Permalink to this headline">¶</a></h3>
<p>The <code class="docutils literal notranslate"><span class="pre">runtime-install.tmpl</span></code> template lists packages to be installed using the
<code class="docutils literal notranslate"><span class="pre">installpkg</span></code> command.  This template is fairly simple, installing common packages and
architecture specific packages. It must end with the <code class="docutils literal notranslate"><span class="pre">run_pkg_transaction</span></code>
command which tells dnf to download and install the packages.</p>
</section>
<section id="runtime-postinstall-tmpl">
<h3>runtime-postinstall.tmpl<a class="headerlink" href="#runtime-postinstall-tmpl" title="Permalink to this headline">¶</a></h3>
<p>The <code class="docutils literal notranslate"><span class="pre">runtime-postinstall.tmpl</span></code> template is where the system configuration
happens. The installer environment is similar to a normal running system, but
needs some special handling. Configuration files are setup, systemd is told to
start the anaconda.target instead of a default system target, and a number of
unneeded services are disabled, some of which can interfere with the
installation. A number of template commands are used here:</p>
<ul class="simple">
<li><p><a class="reference internal" href="pylorax.html#pylorax.ltmpl.LoraxTemplateRunner.append" title="pylorax.ltmpl.LoraxTemplateRunner.append"><code class="xref py py-func docutils literal notranslate"><span class="pre">append</span></code></a> to add text to a file.</p></li>
<li><p><a class="reference internal" href="pylorax.html#pylorax.ltmpl.LoraxTemplateRunner.chmod" title="pylorax.ltmpl.LoraxTemplateRunner.chmod"><code class="xref py py-func docutils literal notranslate"><span class="pre">chmod</span></code></a> changes the file's mode.</p></li>
<li><p><a class="reference internal" href="pylorax.html#pylorax.ltmpl.LoraxTemplateRunner.install" title="pylorax.ltmpl.LoraxTemplateRunner.install"><code class="xref py py-func docutils literal notranslate"><span class="pre">install</span></code></a> to install a file into the installroot.</p></li>
<li><p><a class="reference internal" href="pylorax.html#pylorax.ltmpl.LoraxTemplateRunner.mkdir" title="pylorax.ltmpl.LoraxTemplateRunner.mkdir"><code class="xref py py-func docutils literal notranslate"><span class="pre">mkdir</span></code></a> makes a new directory.</p></li>
<li><p><a class="reference internal" href="pylorax.html#pylorax.ltmpl.LoraxTemplateRunner.move" title="pylorax.ltmpl.LoraxTemplateRunner.move"><code class="xref py py-func docutils literal notranslate"><span class="pre">move</span></code></a> to move a file into the installroot</p></li>
<li><p><a class="reference internal" href="pylorax.html#pylorax.ltmpl.LoraxTemplateRunner.replace" title="pylorax.ltmpl.LoraxTemplateRunner.replace"><code class="xref py py-func docutils literal notranslate"><span class="pre">replace</span></code></a> does text substitution in a file</p></li>
<li><p><a class="reference internal" href="pylorax.html#pylorax.ltmpl.LoraxTemplateRunner.remove" title="pylorax.ltmpl.LoraxTemplateRunner.remove"><code class="xref py py-func docutils literal notranslate"><span class="pre">remove</span></code></a> deletes a file</p></li>
<li><p><a class="reference internal" href="pylorax.html#pylorax.ltmpl.LoraxTemplateRunner.runcmd" title="pylorax.ltmpl.LoraxTemplateRunner.runcmd"><code class="xref py py-func docutils literal notranslate"><span class="pre">runcmd</span></code></a> run arbitrary commands.</p></li>
<li><p><a class="reference internal" href="pylorax.html#pylorax.ltmpl.LoraxTemplateRunner.symlink" title="pylorax.ltmpl.LoraxTemplateRunner.symlink"><code class="xref py py-func docutils literal notranslate"><span class="pre">symlink</span></code></a> creates a symlink</p></li>
<li><p><a class="reference internal" href="pylorax.html#pylorax.ltmpl.LoraxTemplateRunner.systemctl" title="pylorax.ltmpl.LoraxTemplateRunner.systemctl"><code class="xref py py-func docutils literal notranslate"><span class="pre">systemctl</span></code></a> runs systemctl in the installroot</p></li>
</ul>
</section>
<section id="runtime-cleanup-tmpl">
<h3>runtime-cleanup.tmpl<a class="headerlink" href="#runtime-cleanup-tmpl" title="Permalink to this headline">¶</a></h3>
<p>The <code class="docutils literal notranslate"><span class="pre">runtime-cleanup.tmpl</span></code> template is used to remove files that aren't strictly needed
by the installation environment. In addition to the <code class="docutils literal notranslate"><span class="pre">remove</span></code> template command it uses:</p>
<ul class="simple">
<li><p><a class="reference internal" href="pylorax.html#pylorax.ltmpl.LoraxTemplateRunner.removepkg" title="pylorax.ltmpl.LoraxTemplateRunner.removepkg"><code class="xref py py-func docutils literal notranslate"><span class="pre">removepkg</span></code></a>
remove all of a specific package's contents. A package may be pulled in as a dependency, but
not really used. eg. sound support.</p></li>
<li><p><a class="reference internal" href="pylorax.html#pylorax.ltmpl.LoraxTemplateRunner.removefrom" title="pylorax.ltmpl.LoraxTemplateRunner.removefrom"><code class="xref py py-func docutils literal notranslate"><span class="pre">removefrom</span></code></a>
Removes some files from a package. A file glob can be used, or the --allbut option to
remove everything except a select few.</p></li>
<li><p><a class="reference internal" href="pylorax.html#pylorax.ltmpl.LoraxTemplateRunner.removekmod" title="pylorax.ltmpl.LoraxTemplateRunner.removekmod"><code class="xref py py-func docutils literal notranslate"><span class="pre">removekmod</span></code></a>
Removes kernel modules</p></li>
</ul>
</section>
<section id="the-squashfs-filesystem">
<h3>The squashfs filesystem<a class="headerlink" href="#the-squashfs-filesystem" title="Permalink to this headline">¶</a></h3>
<p>After <code class="docutils literal notranslate"><span class="pre">runtime-*.tmpl</span></code> templates have finished their work lorax creates an
empty ext4 filesystem, copies the remaining files to it, and makes a squashfs
filesystem of it. This file is the / of the boot.iso's installer environment
and is what is in the LiveOS/squashfs.img file on the iso.</p>
</section>
<section id="iso-creation">
<h3>iso creation<a class="headerlink" href="#iso-creation" title="Permalink to this headline">¶</a></h3>
<p>The iso creation is handled by another set of templates. The one used depends
on the architecture that the iso is being created for. They are also stored in
<code class="docutils literal notranslate"><span class="pre">/usr/share/lorax/templates.d/99-generic</span></code> and are named after the arch, like
<code class="docutils literal notranslate"><span class="pre">x86.tmpl</span></code> and <code class="docutils literal notranslate"><span class="pre">aarch64.tmpl</span></code>. They handle creation of the tree, copying
configuration template files, configuration variable substitution, treeinfo
metadata (via the <a class="reference internal" href="pylorax.html#pylorax.ltmpl.LoraxTemplateRunner.treeinfo" title="pylorax.ltmpl.LoraxTemplateRunner.treeinfo"><code class="xref py py-func docutils literal notranslate"><span class="pre">treeinfo</span></code></a>
template command). Kernel and initrd are copied from the installroot to their
final locations and then xorrisofs is run to create the boot.iso</p>
</section>
</section>
<section id="custom-templates">
<h2>Custom Templates<a class="headerlink" href="#custom-templates" title="Permalink to this headline">¶</a></h2>
<p>The default set of templates and configuration files from the lorax-generic-templates package
are shipped in the <code class="docutils literal notranslate"><span class="pre">/usr/share/lorax/templates.d/99-generic/</span></code> directory. You can
make a copy of them and place them into another directory under <code class="docutils literal notranslate"><span class="pre">templates.d</span></code>
and they will be used instead if their sort order is below all other directories. This
allows multiple packages to ship lorax templates without conflict. You can (and probably
should) select the specific template directory by passing <code class="docutils literal notranslate"><span class="pre">--sharedir</span></code> to lorax.</p>
</section>
</section>


           </div>
          </div>
          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
        <a href="intro.html" class="btn btn-neutral float-left" title="Introduction to Lorax" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
        <a href="livemedia-creator.html" class="btn btn-neutral float-right" title="livemedia-creator" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
    </div>

  <hr/>

  <div role="contentinfo">
    <p>&#169; Copyright 2018, Red Hat, Inc..</p>
  </div>

  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
    provided by <a href="https://readthedocs.org">Read the Docs</a>.
   

</footer>
        </div>
      </div>
    </section>
  </div>
  <script>
      jQuery(function () {
          SphinxRtdTheme.Navigation.enable(true);
      });
  </script> 

</body>
</html>